
package ru.rs.objects;

import java.util.ArrayList;
import java.util.List;

public class Pool<T> {
    
    public interface PoolObjectFactory<T> {
        
        public T createObject();
    }
    
    private final List<T> freeObjects;
    
    private final PoolObjectFactory<T> factory;
    
    private final int maxSize;
    
    public Pool(PoolObjectFactory<T> factory, int maxSize) {
    
        this.factory = factory;
        this.maxSize = maxSize;
        this.freeObjects = new ArrayList<T>(maxSize);
    }
    
    public T newObject() {
    
        T object = null;
        if (freeObjects.size() == 0) {
            object = factory.createObject();
        } else {
            object = freeObjects.remove(freeObjects.size() - 1);
        }
        return object;
    }
    
    public void free(T object) {
    
        if (freeObjects.size() < maxSize) {
            freeObjects.add(object);
        }
    }
}
